home *** CD-ROM | disk | FTP | other *** search
/ PC/CD Gamer UK 120 / CD Gamer Issue 120 (March 2003) (Disc 2).ISO / mods / Q2_Codered / codeRED1_0.exe / Data1.cab / qfiles.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-08-15  |  11.4 KB  |  483 lines

  1. /*
  2. Copyright (C) 1997-2001 Id Software, Inc.
  3.  
  4. This program is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License
  6. as published by the Free Software Foundation; either version 2
  7. of the License, or (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
  12.  
  13. See the GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  
  19. */
  20.  
  21. //
  22. // qfiles.h: quake file formats
  23. // This file must be identical in the quake and utils directories
  24. //
  25.  
  26. /*
  27. ========================================================================
  28.  
  29. The .pak files are just a linear collapse of a directory tree
  30.  
  31. ========================================================================
  32. */
  33.  
  34. #define IDPAKHEADER        (('K'<<24)+('C'<<16)+('A'<<8)+'P')
  35.  
  36. typedef struct
  37. {
  38.     char    name[56];
  39.     int        filepos, filelen;
  40. } dpackfile_t;
  41.  
  42. typedef struct
  43. {
  44.     int        ident;        // == IDPAKHEADER
  45.     int        dirofs;
  46.     int        dirlen;
  47. } dpackheader_t;
  48.  
  49. #define    MAX_FILES_IN_PACK    4096
  50.  
  51.  
  52. /*
  53. ========================================================================
  54.  
  55. PCX files are used for as many images as possible
  56.  
  57. ========================================================================
  58. */
  59.  
  60. typedef struct
  61. {
  62.     char    manufacturer;
  63.     char    version;
  64.     char    encoding;
  65.     char    bits_per_pixel;
  66.     unsigned short    xmin,ymin,xmax,ymax;
  67.     unsigned short    hres,vres;
  68.     unsigned char    palette[48];
  69.     char    reserved;
  70.     char    color_planes;
  71.     unsigned short    bytes_per_line;
  72.     unsigned short    palette_type;
  73.     char    filler[58];
  74.     unsigned char    data;            // unbounded
  75. } pcx_t;
  76.  
  77.  
  78. /*
  79. ========================================================================
  80.  
  81. .MD2 triangle model file format
  82.  
  83. ========================================================================
  84. */
  85.  
  86. #define IDALIASHEADER        (('2'<<24)+('P'<<16)+('D'<<8)+'I')
  87. #define ALIAS_VERSION    8
  88.  
  89. #define    MAX_TRIANGLES    4096
  90. #define MAX_VERTS        2048
  91. #define MAX_FRAMES        512
  92. #define MAX_MD2SKINS    32
  93. #define    MAX_SKINNAME    64
  94.  
  95. typedef struct
  96. {
  97.     short    s;
  98.     short    t;
  99. } dstvert_t;
  100.  
  101. typedef struct 
  102. {
  103.     short    index_xyz[3];
  104.     short    index_st[3];
  105. } dtriangle_t;
  106.  
  107. typedef struct
  108. {
  109.     byte    v[3];            // scaled byte to fit in frame mins/maxs
  110.     byte    lightnormalindex;
  111. } dtrivertx_t;
  112.  
  113. #define DTRIVERTX_V0   0
  114. #define DTRIVERTX_V1   1
  115. #define DTRIVERTX_V2   2
  116. #define DTRIVERTX_LNI  3
  117. #define DTRIVERTX_SIZE 4
  118.  
  119. typedef struct
  120. {
  121.     float        scale[3];    // multiply byte verts by this
  122.     float        translate[3];    // then add this
  123.     char        name[16];    // frame name from grabbing
  124.     dtrivertx_t    verts[1];    // variable sized
  125. } daliasframe_t;
  126.  
  127.  
  128. // the glcmd format:
  129. // a positive integer starts a tristrip command, followed by that many
  130. // vertex structures.
  131. // a negative integer starts a trifan command, followed by -x vertexes
  132. // a zero indicates the end of the command list.
  133. // a vertex consists of a floating point s, a floating point t,
  134. // and an integer vertex index.
  135.  
  136.  
  137. typedef struct
  138. {
  139.     int            ident;
  140.     int            version;
  141.  
  142.     int            skinwidth;
  143.     int            skinheight;
  144.     int            framesize;        // byte size of each frame
  145.  
  146.     int            num_skins;
  147.     int            num_xyz;
  148.     int            num_st;            // greater than num_xyz for seams
  149.     int            num_tris;
  150.     int            num_glcmds;        // dwords in strip/fan command list
  151.     int            num_frames;
  152.  
  153.     int            ofs_skins;        // each skin is a MAX_SKINNAME string
  154.     int            ofs_st;            // byte offset from start for stverts
  155.     int            ofs_tris;        // offset for dtriangles
  156.     int            ofs_frames;        // offset for first frame
  157.     int            ofs_glcmds;    
  158.     int            ofs_end;        // end of file
  159.  
  160. } dmdl_t;
  161.  
  162. /*
  163. ========================================================================
  164.  
  165. .SP2 sprite file format
  166.  
  167. ========================================================================
  168. */
  169.  
  170. #define IDSPRITEHEADER    (('2'<<24)+('S'<<16)+('D'<<8)+'I')
  171.         // little-endian "IDS2"
  172. #define SPRITE_VERSION    2
  173.  
  174. typedef struct
  175. {
  176.     int        width, height;
  177.     int        origin_x, origin_y;        // raster coordinates inside pic
  178.     char    name[MAX_SKINNAME];        // name of pcx file
  179. } dsprframe_t;
  180.  
  181. typedef struct {
  182.     int            ident;
  183.     int            version;
  184.     int            numframes;
  185.     dsprframe_t    frames[1];            // variable sized
  186. } dsprite_t;
  187.  
  188. /*
  189. ==============================================================================
  190.  
  191.   .WAL texture file format
  192.  
  193. ==============================================================================
  194. */
  195.  
  196.  
  197. #define    MIPLEVELS    4
  198. typedef struct miptex_s
  199. {
  200.     char        name[32];
  201.     unsigned    width, height;
  202.     unsigned    offsets[MIPLEVELS];        // four mip maps stored
  203.     char        animname[32];            // next frame in animation chain
  204.     int            flags;
  205.     int            contents;
  206.     int            value;
  207. } miptex_t;
  208.  
  209.  
  210.  
  211. /*
  212. ==============================================================================
  213.  
  214.   .BSP file format
  215.  
  216. ==============================================================================
  217. */
  218.  
  219. #define IDBSPHEADER    (('P'<<24)+('S'<<16)+('B'<<8)+'I')
  220.         // little-endian "IBSP"
  221.  
  222. #define BSPVERSION    38
  223.  
  224.  
  225. // upper design bounds
  226. // leaffaces, leafbrushes, planes, and verts are still bounded by
  227. // 16 bit short limits
  228. #define    MAX_MAP_MODELS        1024
  229. #define    MAX_MAP_BRUSHES        8192
  230. #define    MAX_MAP_ENTITIES    2048
  231. #define    MAX_MAP_ENTSTRING    0x40000
  232. #define    MAX_MAP_TEXINFO        8192
  233.  
  234. #define    MAX_MAP_AREAS        256
  235. #define    MAX_MAP_AREAPORTALS    1024
  236. #define    MAX_MAP_PLANES        65536
  237. #define    MAX_MAP_NODES        65536
  238. #define    MAX_MAP_BRUSHSIDES    65536
  239. #define    MAX_MAP_LEAFS        65536
  240. #define    MAX_MAP_VERTS        65536
  241. #define    MAX_MAP_FACES        65536
  242. #define    MAX_MAP_LEAFFACES    65536
  243. #define    MAX_MAP_LEAFBRUSHES 65536
  244. #define    MAX_MAP_PORTALS        65536
  245. #define    MAX_MAP_EDGES        128000
  246. #define    MAX_MAP_SURFEDGES    256000
  247. #define    MAX_MAP_LIGHTING    0x200000
  248. #define    MAX_MAP_VISIBILITY    0x100000
  249.  
  250. // key / value pair sizes
  251.  
  252. #define    MAX_KEY        32
  253. #define    MAX_VALUE    1024
  254.  
  255. //=============================================================================
  256.  
  257. typedef struct
  258. {
  259.     int        fileofs, filelen;
  260. } lump_t;
  261.  
  262. #define    LUMP_ENTITIES        0
  263. #define    LUMP_PLANES            1
  264. #define    LUMP_VERTEXES        2
  265. #define    LUMP_VISIBILITY        3
  266. #define    LUMP_NODES            4
  267. #define    LUMP_TEXINFO        5
  268. #define    LUMP_FACES            6
  269. #define    LUMP_LIGHTING        7
  270. #define    LUMP_LEAFS            8
  271. #define    LUMP_LEAFFACES        9
  272. #define    LUMP_LEAFBRUSHES    10
  273. #define    LUMP_EDGES            11
  274. #define    LUMP_SURFEDGES        12
  275. #define    LUMP_MODELS            13
  276. #define    LUMP_BRUSHES        14
  277. #define    LUMP_BRUSHSIDES        15
  278. #define    LUMP_POP            16
  279. #define    LUMP_AREAS            17
  280. #define    LUMP_AREAPORTALS    18
  281. #define    HEADER_LUMPS        19
  282.  
  283. typedef struct
  284. {
  285.     int            ident;
  286.     int            version;    
  287.     lump_t        lumps[HEADER_LUMPS];
  288. } dheader_t;
  289.  
  290. typedef struct
  291. {
  292.     float        mins[3], maxs[3];
  293.     float        origin[3];        // for sounds or lights
  294.     int            headnode;
  295.     int            firstface, numfaces;    // submodels just draw faces
  296.                                         // without walking the bsp tree
  297. } dmodel_t;
  298.  
  299.  
  300. typedef struct
  301. {
  302.     float    point[3];
  303. } dvertex_t;
  304.  
  305.  
  306. // 0-2 are axial planes
  307. #define    PLANE_X            0
  308. #define    PLANE_Y            1
  309. #define    PLANE_Z            2
  310.  
  311. // 3-5 are non-axial planes snapped to the nearest
  312. #define    PLANE_ANYX        3
  313. #define    PLANE_ANYY        4
  314. #define    PLANE_ANYZ        5
  315.  
  316. // planes (x&~1) and (x&~1)+1 are always opposites
  317.  
  318. typedef struct
  319. {
  320.     float    normal[3];
  321.     float    dist;
  322.     int        type;        // PLANE_X - PLANE_ANYZ ?remove? trivial to regenerate
  323. } dplane_t;
  324.  
  325.  
  326. // contents flags are seperate bits
  327. // a given brush can contribute multiple content bits
  328. // multiple brushes can be in a single leaf
  329.  
  330. // these definitions also need to be in q_shared.h!
  331.  
  332. // lower bits are stronger, and will eat weaker brushes completely
  333. #define    CONTENTS_SOLID            1        // an eye is never valid in a solid
  334. #define    CONTENTS_WINDOW            2        // translucent, but not watery
  335. #define    CONTENTS_AUX            4
  336. #define    CONTENTS_LAVA            8
  337. #define    CONTENTS_SLIME            16
  338. #define    CONTENTS_WATER            32
  339. #define    CONTENTS_MIST            64
  340. #define    LAST_VISIBLE_CONTENTS    64
  341.  
  342. // remaining contents are non-visible, and don't eat brushes
  343.  
  344. #define    CONTENTS_AREAPORTAL        0x8000
  345.  
  346. #define    CONTENTS_PLAYERCLIP        0x10000
  347. #define    CONTENTS_MONSTERCLIP    0x20000
  348.  
  349. // currents can be added to any other contents, and may be mixed
  350. #define    CONTENTS_CURRENT_0        0x40000
  351. #define    CONTENTS_CURRENT_90        0x80000
  352. #define    CONTENTS_CURRENT_180    0x100000
  353. #define    CONTENTS_CURRENT_270    0x200000
  354. #define    CONTENTS_CURRENT_UP        0x400000
  355. #define    CONTENTS_CURRENT_DOWN    0x800000
  356.  
  357. #define    CONTENTS_ORIGIN            0x1000000    // removed before bsping an entity
  358.  
  359. #define    CONTENTS_MONSTER        0x2000000    // should never be on a brush, only in game
  360. #define    CONTENTS_DEADMONSTER    0x4000000
  361. #define    CONTENTS_DETAIL            0x8000000    // brushes to be added after vis leafs
  362. #define    CONTENTS_TRANSLUCENT    0x10000000    // auto set if any surface has trans
  363. #define    CONTENTS_LADDER            0x20000000
  364.  
  365.  
  366.  
  367. #define    SURF_LIGHT        0x1        // value will hold the light strength
  368.  
  369. #define    SURF_SLICK        0x2        // effects game physics
  370.  
  371. #define    SURF_SKY        0x4        // don't draw, but add to skybox
  372. #define    SURF_WARP        0x8        // turbulent water warp
  373. #define    SURF_TRANS33    0x10
  374. #define    SURF_TRANS66    0x20
  375. #define    SURF_FLOWING    0x40    // scroll towards angle
  376. #define    SURF_NODRAW        0x80    // don't bother referencing the texture
  377.  
  378.  
  379.  
  380.  
  381. typedef struct
  382. {
  383.     int            planenum;
  384.     int            children[2];    // negative numbers are -(leafs+1), not nodes
  385.     short        mins[3];        // for frustum culling
  386.     short        maxs[3];
  387.     unsigned short    firstface;
  388.     unsigned short    numfaces;    // counting both sides
  389. } dnode_t;
  390.  
  391.  
  392. typedef struct texinfo_s
  393. {
  394.     float        vecs[2][4];        // [s/t][xyz offset]
  395.     int            flags;            // miptex flags + overrides
  396.     int            value;            // light emission, etc
  397.     char        texture[32];    // texture name (textures/*.wal)
  398.     int            nexttexinfo;    // for animations, -1 = end of chain
  399. } texinfo_t;
  400.  
  401.  
  402. // note that edge 0 is never used, because negative edge nums are used for
  403. // counterclockwise use of the edge in a face
  404. typedef struct
  405. {
  406.     unsigned short    v[2];        // vertex numbers
  407. } dedge_t;
  408.  
  409. #define    MAXLIGHTMAPS    4
  410. typedef struct
  411. {
  412.     unsigned short    planenum;
  413.     short        side;
  414.  
  415.     int            firstedge;        // we must support > 64k edges
  416.     short        numedges;    
  417.     short        texinfo;
  418.  
  419. // lighting info
  420.     byte        styles[MAXLIGHTMAPS];
  421.     int            lightofs;        // start of [numstyles*surfsize] samples
  422. } dface_t;
  423.  
  424. typedef struct
  425. {
  426.     int                contents;            // OR of all brushes (not needed?)
  427.  
  428.     short            cluster;
  429.     short            area;
  430.  
  431.     short            mins[3];            // for frustum culling
  432.     short            maxs[3];
  433.  
  434.     unsigned short    firstleafface;
  435.     unsigned short    numleaffaces;
  436.  
  437.     unsigned short    firstleafbrush;
  438.     unsigned short    numleafbrushes;
  439. } dleaf_t;
  440.  
  441. typedef struct
  442. {
  443.     unsigned short    planenum;        // facing out of the leaf
  444.     short    texinfo;
  445. } dbrushside_t;
  446.  
  447. typedef struct
  448. {
  449.     int            firstside;
  450.     int            numsides;
  451.     int            contents;
  452. } dbrush_t;
  453.  
  454. #define    ANGLE_UP    -1
  455. #define    ANGLE_DOWN    -2
  456.  
  457.  
  458. // the visibility lump consists of a header with a count, then
  459. // byte offsets for the PVS and PHS of each cluster, then the raw
  460. // compressed bit vectors
  461. #define    DVIS_PVS    0
  462. #define    DVIS_PHS    1
  463. typedef struct
  464. {
  465.     int            numclusters;
  466.     int            bitofs[8][2];    // bitofs[numclusters][2]
  467. } dvis_t;
  468.  
  469. // each area has a list of portals that lead into other areas
  470. // when portals are closed, other areas may not be visible or
  471. // hearable even if the vis info says that it should be
  472. typedef struct
  473. {
  474.     int        portalnum;
  475.     int        otherarea;
  476. } dareaportal_t;
  477.  
  478. typedef struct
  479. {
  480.     int        numareaportals;
  481.     int        firstareaportal;
  482. } darea_t;
  483.